/********************************************************************************
* @File name: systick.h
* @Author: Loganx
* @Blog: https://www.cnblogs.com/loganxiang
* @Version: 1.0(2025-10-09)
* @Description: STC8A单片机系统定时器，包含多种周期的定时调用函数
********************************************************************************
* 本软件使用了STC的STC8A官方库；
********************************************************************************/
#include "systick.h"
#include "led.h"
#include "userisp.h"

void SystickInit(void){
    TIM_InitTypeDef timer;

    timer.TIM_Mode = TIM_16BitAutoReload;
    timer.TIM_ClkSource = TIM_CLOCK_1T;
    timer.TIM_ClkOut = DISABLE;
    timer.TIM_Value = (uint16)(65536UL - (MAIN_Fosc / 1000UL));
    timer.TIM_Run = ENABLE;
    
    Timer_Inilize(Timer0,&timer);

    NVIC_Timer0_Init(ENABLE,Priority_4);
}

void TimerCallbackSystick(void){
    static uint8 SystickCycle = 0;

    if(++SystickCycle > 1000){
        SystickCycle = 0;
        Systick1ms();
        Systick500ms();
        Systick1s();
    }
    if(SystickCycle % 10 == 0)
        Systick10ms();
    if(SystickCycle % 20 == 0)
        Systick20ms();
    if(SystickCycle % 50 == 0)
        Systick50ms();
    if(SystickCycle % 100 == 0)
        Systick100ms();
    if(SystickCycle % 200 == 0)
        Systick200ms();
    if(SystickCycle == 500)
        Systick500ms();
}

void Systick1ms(void){
    // TODO: 在此处添加用户代码
}
void Systick10ms(void){
    // TODO: 在此处添加用户代码
}
void Systick50ms(void){
    // TODO: 在此处添加用户代码
}
void Systick100ms(void){
    // TODO: 在此处添加用户代码
    SystickCallbackLED();
}
void Systick200ms(void){
    // TODO: 在此处添加用户代码
}
void Systick500ms(void){
    // TODO: 在此处添加用户代码
}
void Systick1s(void){
    // TODO: 在此处添加用户代码
    SystickCallbackUserISP();
}
